From 1ccfdb66ac38a0e7a8f596eff62ab544f01f2e59 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:13:40 -0600 Subject: [PATCH] convert mkshort from char* to QByteArray (#1171) * convert mkshort from char* to QByteArray. and store conflict count directly in hash. * fix potential detach and rename vars * tweak whitespace removal. * don't split codepoints that comprise a grapheme. * enhance mkshort test * fix enhanced test * test mkshort replacements * remformat mkshort with astyle * add mkshort test to cmake --- CMakeLists.txt | 1 + mkshort.cc | 557 ++++++++++------------------------------ reference/mkshort.style | 6 +- reference/mkshort4.csv | 300 +++++++++++----------- reference/mkshort4.log | 18 ++ reference/mkshort5.csv | 300 +++++++++++----------- reference/mkshort6.csv | 300 +++++++++++----------- testo.d/mkshort.test | 28 ++ 8 files changed, 635 insertions(+), 875 deletions(-) create mode 100644 reference/mkshort4.log diff --git a/CMakeLists.txt b/CMakeLists.txt index 28d131c5c..12a6c11c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -396,6 +396,7 @@ set(TESTS kml-read kml lowranceusr + mkshort mtk multiurlgpx nmea diff --git a/mkshort.cc b/mkshort.cc index ef6c4b697..4ad3fc47f 100644 --- a/mkshort.cc +++ b/mkshort.cc @@ -1,7 +1,7 @@ /* Generate unique short names. - Copyright (C) 2003, 2004, 2005, 2006 Robert Lipe, robertlipe+source@gpsbabel.org + Copyright (C) 2003-2006, 2023 Robert Lipe, robertlipe+source@gpsbabel.org This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,16 +20,15 @@ */ #include // for assert -#include // for isspace, toupper, isdigit -#include // for INT_MAX -#include // for strlen, memmove, strchr, strcpy, strncmp, strcat, strncpy +#include // for isspace, isdigit #include // for QByteArray #include // for QChar, QChar::ReplacementCharacter #include // for QHash, QHash<>::iterator, qHash, QHash<>::size_type #include // for QString +#include // for QVector #include // for CaseInsensitive -#include // for foreach +#include // for qAsConst #include "defs.h" #include "geocache.h" // for Geocache @@ -37,22 +36,18 @@ #define MYNAME "mkshort" -static const char vowels[] = "aeiouAEIOU"; - -static constexpr unsigned int default_target_len = 8U; -static const char* DEFAULT_BADCHARS = "\"$.,'!-"; - -struct uniq_shortname { - int conflictctr{0}; -}; +static const QByteArray vowels("aeiouAEIOU"); +static constexpr int default_target_len = 8; +static constexpr const char default_badchars[] = "\"$.,'!-"; class ShortNameKey; -using ShortNameHash = QHash; -class ShortNameKey { +using ShortNameHash = QHash; +class ShortNameKey +{ public: ShortNameKey(const QByteArray& name) : shortname(name) {} /* converting constructor */ - friend qhash_result_t qHash(const ShortNameKey &key, qhash_result_t seed = 0) noexcept + friend qhash_result_t qHash(const ShortNameKey& key, qhash_result_t seed = 0) noexcept { // We hash all strings as upper case. return qHash(key.shortname.toUpper(), seed); @@ -61,16 +56,16 @@ public: QByteArray shortname; }; -inline bool operator==(const ShortNameKey& lhs, const ShortNameKey &rhs) noexcept +inline bool operator==(const ShortNameKey& lhs, const ShortNameKey& rhs) noexcept { return lhs.shortname.compare(rhs.shortname, Qt::CaseInsensitive) == 0; } struct mkshort_handle_imp { - unsigned int target_len{default_target_len}; - char* badchars{nullptr}; - char* goodchars{nullptr}; - char* defname{nullptr}; + int target_len{default_target_len}; + QByteArray badchars{default_badchars}; + QByteArray goodchars; + QByteArray defname{"WPT"}; ShortNameHash namelist; /* Various internal flags */ @@ -80,78 +75,56 @@ struct mkshort_handle_imp { bool must_uniq{true}; }; -static struct replacements { - const char* orig; - const char* replacement; -} replacements[] = { - {"zero", "0"}, - {"one", "1"}, - {"two", "2"}, - {"three", "3"}, - {"four", "4"}, - {"five", "5"}, - {"six", "6"}, - {"seven", "7"}, - {"eight", "8"}, - {"nine", "9"}, - {nullptr, nullptr} +struct replacement_t { + QByteArray orig; + QByteArray replacement; +}; +static const QVector replacements = { + {"zero", "0"}, + {"one", "1"}, + {"two", "2"}, + {"three", "3"}, + {"four", "4"}, + {"five", "5"}, + {"six", "6"}, + {"seven", "7"}, + {"eight", "8"}, + {"nine", "9"} }; short_handle mkshort_new_handle() { - auto* h = new mkshort_handle_imp; - - h->badchars = xstrdup(DEFAULT_BADCHARS); - h->defname = xstrdup("WPT"); - - return h; -} - -static -uniq_shortname* -is_unique(mkshort_handle_imp* h, const QByteArray& name) -{ - if (h->namelist.contains(name)) { - return h->namelist.value(name); - } - return (uniq_shortname*) nullptr; + return new mkshort_handle_imp; } static void -add_to_hashlist(mkshort_handle_imp* h, const QByteArray& name) +mkshort_add_to_list(mkshort_handle_imp* h, QByteArray& name, bool is_utf8) { - h->namelist.insert(name, new uniq_shortname); -} - -static -void -mkshort_add_to_list(mkshort_handle_imp* h, QByteArray& name) -{ - static_assert(!std::is_signedtarget_len)>::value, - "simplify the following logic if target length is signed."); - assert(h->target_len <= INT_MAX); - int target_len = h->target_len; - - uniq_shortname* s; - while ((s = is_unique(h, name))) { + while (h->namelist.contains(name)) { + auto& conflictctr = h->namelist[name]; QByteArray suffix("."); - suffix.append(QByteArray::number(++s->conflictctr)); + suffix.append(QByteArray::number(++conflictctr)); + int suffixcnt = suffix.size(); - if (name.size() + suffix.size() <= target_len) { - name.append(suffix); - } else if (suffix.size() <= target_len) { - // FIXME: utf8 => grapheme truncate - name.truncate(target_len - suffix.size()); + if (name.size() + suffixcnt <= h->target_len) { name.append(suffix); + } else if (int keepcnt = h->target_len - suffixcnt; keepcnt >= 0) { + if (is_utf8) { + QString result = grapheme_truncate(QString::fromUtf8(name), keepcnt); + name = result.toUtf8().append(suffix); + } else { + name.truncate(keepcnt); + name.append(suffix); + } } else { fatal("mkshort failure, the specified short length is insufficient.\n"); } } - add_to_hashlist(h, name); + h->namelist.insert(name, 0); } void @@ -167,25 +140,14 @@ mkshort_del_handle(short_handle* h) return; } - for (auto it = hdr->namelist.cbegin(), end = hdr->namelist.cend(); it != end; ++it) { #if 0 + for (auto it = hdr->namelist.cbegin(), end = hdr->namelist.cend(); it != end; ++it) { if (global_opts.verbose_status >= 2 && it.value()->conflictctr) { fprintf(stderr, "%d Output name conflicts: '%s'\n", it.value()->conflictctr, it.key().shortname.constData()); } -#endif - delete it.value(); - } - hdr->namelist.clear(); - hdr->namelist.squeeze(); - /* setshort_badchars(*h, NULL); ! currently setshort_badchars() always allocates something ! */ - if (hdr->badchars != nullptr) { - xfree(hdr->badchars); - } - setshort_goodchars(*h, nullptr); - if (hdr->defname) { - xfree(hdr->defname); } +#endif delete hdr; *h = nullptr; @@ -196,29 +158,26 @@ mkshort_del_handle(short_handle* h) */ static -char* -delete_last_vowel(int start, char* istring, int* replaced) +bool +delete_last_vowel(int start, QByteArray& iostring) { /* * Basically implement strrchr. */ - *replaced = 0; - for (int l = strlen(istring); l > start; l--) { - if (strchr(vowels, istring[l-1])) { + assert(start >= 1); + bool replaced = false; + for (int l = iostring.size(); l > start; --l) { + if (vowels.contains(iostring.at(l - 1))) { /* If vowel is the first letter of a word, keep it.*/ - if (istring[l-2] == ' ') { + if (iostring.at(l - 2) == ' ') { continue; } - char* ostring = xstrdup(istring); - strncpy(&ostring[l-1], &istring[l], 1+strlen(istring)-l); - ostring[strlen(istring)-1] = 0; - *replaced = 1; - strcpy(istring, ostring); - xfree(ostring); + iostring.remove(l - 1, 1); + replaced = true; break; } } - return istring; + return replaced; } /* @@ -226,21 +185,19 @@ delete_last_vowel(int start, char* istring, int* replaced) * are made only at the end of the string. */ void -replace_constants(char* s) +replace_constants(QByteArray& s) { - int origslen = strlen(s); - - for (struct replacements* r = replacements; r->orig; r++) { - int rl = strlen(r->orig); + for (const auto& r : replacements) { /* * If word is in replacement list and preceded by a * space, replace it. */ - if ((origslen - rl > 1) && - (0 == case_ignore_strcmp(r->orig, &s[origslen - rl])) && - (s[origslen - rl - 1] == ' ')) { - strcpy(&s[origslen - rl], r->replacement); - return ; + if ((s.size() > r.orig.size()) && + (0 == r.orig.compare(s.mid(s.size() - r.orig.size()), Qt::CaseInsensitive)) && + (s.at(s.size() - r.orig.size() - 1) == ' ')) { + s.truncate(s.size() - r.orig.size()); + s.append(r.replacement); + return; } } } @@ -297,10 +254,7 @@ setshort_defname(short_handle h, const char* s) if (s == nullptr) { fatal("setshort_defname called without a valid name."); } - if (hdl->defname != nullptr) { - xfree(hdl->defname); - } - hdl->defname = xstrdup(s); + hdl->defname = s; } /* @@ -313,10 +267,7 @@ setshort_badchars(short_handle h, const char* s) { auto* hdl = (mkshort_handle_imp*) h; - if ((hdl->badchars != nullptr)) { - xfree(hdl->badchars); - } - hdl->badchars = xstrdup(s ? s : DEFAULT_BADCHARS); + hdl->badchars = s ? s : default_badchars; } /* @@ -328,13 +279,10 @@ setshort_goodchars(short_handle h, const char* s) { auto* hdl = (mkshort_handle_imp*) h; - if (hdl->goodchars != nullptr) { - xfree(hdl->goodchars); - } if (s != nullptr) { - hdl->goodchars = xstrdup(s); + hdl->goodchars = s; } else { - hdl->goodchars = nullptr; + hdl->goodchars.clear(); } } @@ -363,10 +311,7 @@ setshort_mustuniq(short_handle h, int i) QByteArray mkshort(short_handle h, const QByteArray& istring, bool is_utf8) { - char* ostring; - char* tstring; - char* cp; - int i, l, replaced; + QByteArray ostring; auto* hdl = (mkshort_handle_imp*) h; if (is_utf8) { @@ -375,9 +320,9 @@ mkshort(short_handle h, const QByteArray& istring, bool is_utf8) // QString::fromUtf8() doesn't quite promise to use QChar::ReplacementCharacter, // but if it did toss them. result.remove(QChar::ReplacementCharacter); - ostring = xstrdup(result.toUtf8().constData()); + ostring = result.toUtf8(); } else { - ostring = xstrdup(istring.constData()); + ostring = istring; } /* @@ -387,51 +332,37 @@ mkshort(short_handle h, const QByteArray& istring, bool is_utf8) * the new seven digit geocache numbers and special case whacking * the 'G' off the front. */ - if ((hdl->target_len == 6) && (strlen(ostring) == 7) && - (ostring[0] == 'G') && (ostring[1] == 'C')) { - memmove(&ostring[0], &ostring[1], strlen(ostring)); + if ((hdl->target_len == 6) && (ostring.size() == 7) && + ostring.startsWith("GC")) { + ostring.remove(0, 1); } /* - * Whack leading "[Tt]he", + * Whack leading "[Tt]he " */ - if ((strlen(ostring) > hdl->target_len + 4) && - (strncmp(ostring, "The ", 4) == 0 || - strncmp(ostring, "the ", 4) == 0)) { - char* nstring = xstrdup(ostring + 4); - xfree(ostring); - ostring = nstring; + if ((ostring.size() > (hdl->target_len + 4)) && + (ostring.startsWith("The ") || ostring.startsWith("the "))) { + ostring.remove(0, 4); } - /* Eliminate leading whitespace in all cases */ - while (ostring[0] && isspace(ostring[0])) { - /* If orig string has N bytes, we want to copy N-1 bytes - * of the string itself plus the string terminator (which - * matters if the string consists of nothing but spaces) - */ - memmove(&ostring[0], &ostring[1], strlen(ostring)); - } + /* In all cases eliminate leading and trailing whitespace */ + ostring = ostring.trimmed(); if (!hdl->whitespaceok) { /* * Eliminate Whitespace */ - tstring = xstrdup(ostring); - l = strlen(tstring); - cp = ostring; - for (i=0; imustupper) { - for (tstring = ostring; *tstring; tstring++) { - *tstring = toupper(*tstring); - } + ostring = ostring.toUpper(); } /* Before we do any of the vowel or character removal, look for @@ -443,54 +374,34 @@ mkshort(short_handle h, const QByteArray& istring, bool is_utf8) /* * Eliminate chars on the blacklist. */ - tstring = xstrdup(ostring); - l = strlen(tstring); - cp = ostring; - for (i=0; ibadchars, tstring[i])) { - continue; - } - if (hdl->goodchars && (!strchr(hdl->goodchars, tstring[i]))) { - continue; + { + QByteArray tstring; + ostring.swap(tstring); + for (const auto ch : qAsConst(tstring)) { + if (hdl->badchars.contains(ch)) { + continue; + } + if (!hdl->goodchars.isEmpty() && (!hdl->goodchars.contains(ch))) { + continue; + } + ostring.append(ch); } -// FIXME(robertl): we need a way to not return partial UTF-8, but this isn't it. -// if (!isascii(tstring[i])) -// continue; - *cp++ = tstring[i]; } - *cp = 0; - xfree(tstring); /* - * Eliminate repeated whitespace. This can only shorten the string - * so we do it in place. + * Eliminate whitespace. + * In all cases remove leading and trailing whitespace. + * Leading and/or trailing whitespace may have been created by earlier + * operations that removed character(s) before and/or after whitespace. + * Conditionally simplify embedded whitespace. */ - if (!hdl->repeating_whitespaceok) { - for (i = 0; i < l-1; i++) { - if (ostring[i] == ' ' && ostring[i+1] == ' ') { - memmove(&ostring[i], &ostring[i+1], l-i); - } - } - } - - /* Eliminate trailing whitespace in all cases. This is done late because - earlier operations may have vacated characters after the space. */ - - char *end = ostring + strlen(ostring) - 1; - while (end > ostring && isspace(*end)) { - *end-- = 0; - } - + ostring = hdl->repeating_whitespaceok? ostring.trimmed() : ostring.simplified(); /* * Toss vowels to approach target length, but don't toss them * if we don't have to. We always keep the leading two letters * to preserve leading vowels and some semblance of pronouncability. * - * FIXME: There's a boundary case here where we're too aggressive. - * If the target length is "6" we will shorten "Trolley" to "Trlly", - * when we really don't have to. We should throw away one vowel, not - * both. */ /* @@ -503,14 +414,10 @@ mkshort(short_handle h, const QByteArray& istring, bool is_utf8) * * It also helps units with speech synthesis. */ - if (hdl->target_len < 15) { - replaced = 1; - } else { - replaced = 0; - } + bool replaced = hdl->target_len < 15; - while (replaced && strlen(ostring) > hdl->target_len) { - ostring = delete_last_vowel(2, ostring, &replaced); + while (replaced && (ostring.size() > hdl->target_len)) { + replaced = delete_last_vowel(2, ostring); } /* @@ -520,54 +427,49 @@ mkshort(short_handle h, const QByteArray& istring, bool is_utf8) * Walk in the Woods 2. */ - char* np = ostring + strlen(ostring); - while ((np != ostring) && *(np-1) && isdigit(*(np-1))) { - np--; - } - size_t nlen = strlen(np); - /* * Now brutally truncate the resulting string, preserve trailing * numeric data. * If the numeric component alone is longer than our target string - * length, use only what'll fit. + * length, use the trailing part of the the numeric component. */ - if (is_utf8) { - /* ToDo: Keep trailing numeric data as described above! */ - QString result = grapheme_truncate(QString::fromUtf8(ostring), hdl->target_len); - xfree(ostring); - ostring = xstrdup(result.toUtf8().constData()); - } else if ((/*i = */strlen(ostring)) > hdl->target_len) { - char* dp = &ostring[hdl->target_len] - nlen; - if (dp < ostring) { - dp = ostring; - } - memmove(dp, np, nlen); - dp[nlen] = 0; - // Essentially ostring.rtrim() from here down. - if (ostring && ostring[0] != 0) { // Empty output string? Bail. - char *end = ostring + strlen(ostring) - 1; - while (end > ostring && isspace(*end)) { - *end-- = 0; + if (int delcnt = ostring.size() - hdl->target_len; delcnt > 0) { + int suffixcnt = 0; + for (auto it = ostring.crbegin(); it != ostring.crend(); ++it) { + if (isdigit(*it)) { + ++suffixcnt; + } + if (suffixcnt == hdl->target_len) { + break; } } + + int keepcnt = hdl->target_len - suffixcnt; + assert(keepcnt >= 0); + + if (is_utf8) { + QString result = grapheme_truncate(QString::fromUtf8(ostring), keepcnt); + ostring = result.toUtf8().append(ostring.right(suffixcnt)); + } else { + ostring.remove(keepcnt, delcnt); + } + while (isspace(ostring.back())) { + ostring.chop(1); + } } /* * If, after all that, we have an empty string, punt and * let the must_uniq code handle it. */ - if (ostring && ostring[0] == '\0') { - xfree(ostring); - ostring = xstrdup(hdl->defname); + if (ostring.isEmpty()) { + ostring = hdl->defname; } - QByteArray rval(ostring); - xfree(ostring); if (hdl->must_uniq) { - mkshort_add_to_list(hdl, rval); + mkshort_add_to_list(hdl, ostring, is_utf8); } - return rval; + return ostring; } QString @@ -607,192 +509,3 @@ mkshort_from_wpt(short_handle h, const Waypoint* wpt) return mkshort(h, wpt->shortname); } - - -#if TEST_MKSHORT -const char* foo[] = { - "VwthPst# 3700.706N 08627.588W 0000000m View the Past #2 ", - "PilotRoc 3655.270N 08717.173W 0000000m Pilot Rock by CacheAdvance ", - "MrCycsNg 3652.407N 08728.890W 0000000m Mr. Cayces Neighborhood by Ca", - "SOLDIER 3640.691N 08726.660W 0000000m SOLDIER’S TRIBUTE ", - "ZOOMZOOM 3636.659N 08721.793W 0000000m ZOOM ZOOM ZOOM by Feros Family", - "SOCLOSEB 3636.494N 08722.086W 0000000m SO CLOSE BUT YET by Kyle of Fe", - "InSrchfS 3636.363N 08636.363W 0000000m In Search of Steam by BigHank ", - "RdBlngSp 3632.119N 08550.956W 0000000m Red Boiling Springs by Firedog", - "HelngWtr 3631.729N 08550.481W 0000000m Healing Waters by FiredogPotte", - "AHHtheVi 3629.020N 08533.891W 0000000m ogPotter ", - "LstCrkCc 3628.167N 08801.656W 0000000m Lost Creek Cache by Paul Kathy", - "DlvrncTr 3626.412N 08729.249W 0000000m Deliverance Train by Team Skay", - "FrQrtrRn 3438.502N 08646.926W 0000000m Four Quarter Rendezvous by Zay", - "Jstlttlc 3620.647N 08814.298W 0000000m Just a little cache by Paul Ka", - "BrryPtch 3618.786N 08616.344W 0000000m Berry Patch Cache by White Dog", - "AStrllDw 3342.752N 08630.829W 0000000m A Stroll Down Memory Lane by t", - "QunfTnns 3606.413N 08651.962W 0000000m Queen of Tennessee by A182pilo", - "GoneFish 3618.199N 08655.171W 0000000m Gone Fishin' by White Dog Pack", - "GrnwysFn 3610.942N 08642.061W 0000000m Greenways Fence by Ukulele And", - "AStnsThr 3611.240N 08638.324W 0000000m A Stone's Throw by Murrcat & S", - "Nashvlls 3617.112N 08642.359W 0000000m Nashville's Zoo by White Dog P", - "BltzMcr4 3517.127N 08622.211W 0000000m Blitz Micro Number 4 by IHTFP ", - "NkdnthWn 3437.145N 08651.693W 0000000m Naked in the Wind by Zaybex ", - "ANcPlctR 3603.389N 08654.418W 0000000m A Nice Place to Rest by JoGPS ", - "welcomtT 3638.155N 08720.130W 0000000m welcome to TN by Raf of the se", - "welcomtK 3638.956N 08721.011W 0000000m welcome to KY by raf of the se", - "BltzMcr5 3506.191N 08634.277W 0000000m Blitz Micro Number 5 by IHTFP ", - "JmsFmlyG 3615.887N 08649.846W 0000000m James Family Grocery by White ", - "seekngrf 3629.262N 08742.333W 0000000m seekeing refuge by raf of the ", - "SecrtFll 3614.927N 08534.180W 0000000m Secret Falls ", - "ApstlcTh 3613.870N 08645.108W 0000000m Apostolic Thistle Walk by Jame", - "WllIllBD 3609.258N 08637.268W 0000000m Well....I'll Be \"Dammed\" byi", - "BettysBt 3608.857N 08550.564W 0000000m Betty's Booty by White Dog Pac", - "SmthngSm 3439.748N 08643.522W 0000000m Something Smells Fishy by Zayb", - "RckyRd(C 3605.315N 08549.326W 0000000m Rocky Road (Center Hill Lake) ", - "Brdwtchr 3436.605N 08651.243W 0000000m Birdwatcher's Dream by Zaybex ", - "JcksnsHl 3605.185N 08619.439W 0000000m Jackson's Halls by White Dog P", - "FrgttnP2 3509.599N 08633.282W 0000000m Forgotten Park 2 by mdawg & mu", - "SOLDIERS 3640.691N 08726.660W 0000000m SOLDIERS TRIBUTE by Feros Fami", - "EndofRop 3433.820N 08650.460W 0000000m End of Rope by Big Rock ", - "VwthPst1 3659.263N 08627.114W 0000000m View the Past #1 by wkgraham ", - "VwthPst2 3700.706N 08627.588W 0000000m View the Past #2 by wkgraham ", - "Trash#8 3603.102N 08655.144W 0000000m Cache In Trash Out # 8 ", - "SlwwwwCc 3602.543N 08535.953W 0000000m Sloowwww Cache by Tntcacher ", - "Leavttbv 3602.514N 08638.686W 0000000m Leave it to beaver by A182pilo", - "WhrrthHr 3436.594N 08654.759W 0000000m Where are the Horses? by Zaybe", - "ButtonCc 3433.401N 08645.294W 0000000m Button Cache by Zaybex ", - "MrcsLbrr 3436.842N 08655.972W 0000000m Marco's Library by Marco ", - "Octopus 3526.743N 08534.757W 0000000m Octopus by White Dog Pack ", - "WtrFllsV 3544.140N 08527.861W 0000000m Water Falls Valley by Cave Rat", - "DeddrpPn 3448.126N 08719.696W 0000000m Dead-drop Pink by Marco ", - "JWhlrRvr 3448.157N 08719.914W 0000000m Joe Wheeler River Walk by Marc", - "CvSprngs 3432.797N 08651.084W 0000000m Cave Springs Cache by Marco.. ", - "CnyFrkOv 3550.876N 08518.446W 0000000m Fork Overlook ", - "SheepsCa 3550.527N 08519.480W 0000000m Sheep's Cave ", - "VrgnFlls 3550.308N 08519.904W 0000000m Virgin Falls Cache ", - "ShrtctVr 3550.170N 08519.590W 0000000m Shortcut Virtual ", - "KlylFlls 3549.105N 08539.814W 0000000m Klaylee Falls Cache by pattytr", - "FshngfrB 3548.923N 08538.558W 0000000m BADGER by M&Mk ", - "TpfthHll 3548.808N 08601.722W 0000000m Top of the Hill Pet Cache by M", - "TwnFllsC 3548.560N 08537.996W 0000000m Twin Falls Cache by SLCREW a", - "WtchsCst 3548.197N 08537.673W 0000000m Witch's Castle Keys by SLCREW ", - "ThatCave 3544.901N 08522.854W 0000000m That Cave by JaDan150 and AprJ", - "BssltwnW 3541.174N 08801.489W 0000000m Busseltown Wildlife Refuge by ", - "Riverfrn 3540.968N 08546.995W 0000000m Riverfront by SLCREW and M&M", - "Basement 3540.086N 08521.304W 0000000m The Basement ", - "EfflTwrC 3617.132N 08818.371W 0000000m Eiffel Tower Cache by Dick Wan", - "KeyholeC 3544.562N 08524.098W 0000000m Keyhole Cave by Cave Rat ", - "(MC^2)Mn 3444.990N 08630.218W 0000000m (MC^2) Monte Sano Cuts Cache b", - "WildctCc 3636.823N 08808.087W 0000000m Wildcat Cache by The Storm ", - "NAlbm/Tn 3444.365N 08632.688W 0000000m N. Alabama / Tennessee Valley ", - "CalebsCa 3444.215N 08633.103W 0000000m Caleb's Cave by Papaw and Cale", - "MntSnPrs 3444.201N 08632.591W 0000000m Monte Sano Preserve by Evan & ", - "FltRckFl 3444.475N 08629.958W 0000000m Flat Rock Falls Cache by Jason", - "PanormCc 3443.961N 08631.638W 0000000m The Panorama Cache by IHTFP an", - "TnnssScv 3602.861N 08652.751W 0000000m Tennessee Scavenger Hunt Cache", - "Geocache 3435.209N 08655.968W 0000000m Geocache by Papaw & Caleb ", - "Skellig 3444.100N 08656.566W 0000000m Skellig by Zaybex ", - "Deceptio 3433.450N 08655.711W 0000000m Deception by Papaw and Caleb ", - "AwlknthD 3433.310N 08655.635W 0000000m A walk in the Desert by Papa", - "MiniMsQs 3558.934N 08650.674W 0000000m Mini Me's Quest by CrotalusRex", - "BakrsBlf 3541.891N 08717.300W 0000000m Bakers Bluff by Flower Child &", - "GoFlyAKi 3435.664N 08659.267W 0000000m Go Fly A Kite by Marco.. ", - "FlntCrkA 3432.028N 08656.806W 0000000m Flint Creek Adventure by Marco", - "HonordMn 3534.680N 08612.557W 0000000m Honored Mount by Southpaw ", - "SafariZo 3440.697N 08700.774W 0000000m Safari Zone by Zaybex ", - "JckDnlsC 3517.077N 08622.260W 0000000m Jack Daniels Cache by Rmearse ", - "FrgttnPr 3509.599N 08633.282W 0000000m Forgotten Park by mdawg & muff", - "DntOvrlk 3513.326N 08616.031W 0000000m Dont Overlook Me Cache ", - "ArYStmpd 3513.039N 08615.110W 0000000m Are You Stumped Yet? cache ", - "CchtthBn 3512.532N 08614.691W 0000000m Cache at the Bend ", - "Thtsnkng 3609.009N 08530.314W 0000000m That sinking feeling by Tntcac", - "GamersCc 3449.136N 08635.836W 0000000m mer's Cache by avoral ", - "CchMIfYC 3452.455N 08620.648W 0000000m Cache Me If You Can! by Glen H", - "SavageVs 3526.915N 08535.136W 0000000m Savage Vista by White Dog Pack", - "PrtrnG15 3555.479N 08653.274W 0000000m Praetorian Guards Hail Caesar #15!", - "WtrlnAmp 3443.722N 08632.535W 0000000m Waterline Amphitheater by Fath", - "BysLttlC 3447.569N 08638.448W 0000000m Boys' Little Cache by Zaybex ", - "DrgnsBrt 3443.779N 08635.188W 0000000m Dragon's Breath by Zaybex ", - "CryBbyHl 3430.733N 08657.362W 0000000m Cry Baby Hollow Cache by La Pa", - "Parmer 3606.218N 08651.590W 0000000m Parmer by A182pilot & Family ", - "JnnfrndJ 3438.141N 08632.991W 0000000m Jennifer and Jonathans Cliff C", - "ALDRIDGE 3435.305N 08632.868W 0000000m ALDRIDGE CREEK LOTTA LOOT!! by", - "RcktCtyS 3440.032N 08631.352W 0000000m Rocket City Stash by David Upt", - "TrgcAccd 3608.561N 08648.381W 0000000m Tragic Accident by Campaholics", - "FALLENTR 3439.210N 08631.104W 0000000m FALLEN TREE 4 MILE POST by zac", - "TrshOt15 3558.964N 08646.064W 0000000m Cache In Trash Out # 15 by Jo", - "TrshOt13 3602.214N 08650.428W 0000000m Cache In Trash Out #13 by JoGP", - "PrcysDrp 3604.312N 08653.465W 0000000m Percys Dripping Springs by KLi", - "TrshOt14 3605.292N 08648.560W 0000000m Cache In Trash Out # 14 by JoG", - "PrtrnGr5 3557.621N 08640.278W 0000000m Praetorian Guards Hail Caesar #5!", - "PrtrnGr4 3557.370N 08640.201W 0000000m Praetorian Guards Hail Caesar #4!", - "PrtrnGr3 3557.250N 08640.047W 0000000m Praetorian Guards Hail Caesar #3!", - "GrnMntnC 3439.120N 08631.100W 0000000m Green Mountain Cache by Steve ", - "TrshOt12 3605.330N 08635.817W 0000000m Cache In Trash Out #12 by JoGP", - "BlncngAc 3608.579N 08648.120W 0000000m Balancing Act by Campaholics ", - "DittoCac 3434.652N 08633.310W 0000000m Ditto Cache by mookey ", - "EraserCc 3431.888N 08633.024W 0000000m Eraser Cache by Zaybex ", - "FrMlPstE 3439.440N 08630.180W 0000000m Four Mile Post Extension Cache", - "MllrdFxC 3439.578N 08706.552W 0000000m Mallard-Fox Creek Cache by bam", - "FireCach 3443.908N 08630.318W 0000000m he by Glen Pam Chase M ", - "FlntRvrC 3443.170N 08625.990W 0000000m Flint River Canoe Cache by Ran", - "ArabinCc 3419.104N 08628.765W 0000000m The Arabian Cache by WesNSpace", - "CvrdBrdg 3412.406N 08659.392W 0000000m Covered Bridge Cache by pmarkh", - "MilesTCc 3424.470N 08611.720W 0000000m Miles Too Cache by Rmearse ", - "MbryOvrl 3423.803N 08611.922W 0000000m Mabrey Overlook Me by DDVaughn", - "LwEnfrcm 3423.218N 08612.258W 0000000m Law Enforcement Cache by DDVau", - "GrndDddy 3423.128N 08612.025W 0000000m Grand Daddys Home by Rmearse ", - "BamaCach 3421.459N 08611.686W 0000000m The Bama Cache by DDVaughn & T", - "Canyons 3440.085N 08600.910W 0000000m The Canyons by Aubrey and Josh", - "ADamGodV 3511.677N 08616.587W 0000000m A Dam Good View by mdawg & muf", - "UNDERTHE 3446.918N 08739.790W 0000000m UNDER THE ROCK by RUNNINGWILD ", - "SQUIRREL 3448.712N 08741.681W 0000000m SQUIRREL'S NEST by RUNNINGWILD", - "WlknthPr 3448.273N 08741.844W 0000000m Walk in the Park by Runningwil", - "NetsClue 3448.494N 08741.977W 0000000m Net's Clues by Runningwild Adv", - "NatrlBrd 3405.583N 08736.909W 0000000m Natural Bridge by Southeast Xt", - "TrnglPrk 3341.448N 08640.980W 0000000m Triangle Park Cache by Charles", - "LttlRvrI 3421.855N 08539.597W 0000000m Little River Initiative by spa", - "GimmShlt 3430.087N 08536.834W 0000000m Gimme Shelter by Big Rock & Po", - "GnomeTrs 3433.081N 08535.849W 0000000m Gnome Treasure by Big Rock ", - "FlyingTr 3608.594N 08648.179W 0000000m Flying Torso by Campaholics ", - "CultivtC 3608.582N 08648.064W 0000000m Cultivate a Cure by Campahol", - __nullptr -} -; - -int main() -{ - int r; - - auto h = mkshort_new_handle(); -// setshort_whitespace_ok(h, false); - - printf("%s\n", mkshort(h, "The Troll", false)); - printf("%s\n", mkshort(h, "EFI", false)); - printf("%s\n", mkshort(h, "the Troll", false)); - printf("%s\n", mkshort(h, "the Trolley", false)); - printf("%s\n", mkshort(h, "The Troll Lives Under The Bridge", false)); - printf("%s\n", mkshort(h, "The \"Troll\" Lives Under $$ The Bridge!", false)); - printf("%s\n", mkshort(h, "The Trolley Goes Round", false)); - printf("%s\n", mkshort(h, "Cache In / Trash Out #1", false)); - printf("%s\n", mkshort(h, "Cache In / Trash Out #2", false)); - printf("%s\n", mkshort(h, "Cache In / Trash Out #137", false)); - printf("|%s|\n", mkshort(h, "Cache .", false)); - printf("|%s|\n", mkshort(h, "Cache .", false)); - printf("|%s|\n", mkshort(h, "Cache .", false)); - printf("|%s|\n", mkshort(h, " Cache .", false)); - -#if 0 - const char** foop = foo; - while (*foop) { - printf("%s | %s\n", mkshort(h, *foop+39, false), *foop+39); - foop++; - } -#endif - - printf("%s\n", delete_last_vowel(0, xstrdup("the quick brown foo"), &r)); - printf("%s\n", delete_last_vowel(0, xstrdup("the quick brown fox"), &r)); - printf("%s\n", delete_last_vowel(0, xstrdup("xxx"), &r)); - printf("%s\n", delete_last_vowel(0, xstrdup("ixxx"), &r)); - printf("%s\n", delete_last_vowel(0, xstrdup("aexxx"), &r)); - - return 0; -} -#endif diff --git a/reference/mkshort.style b/reference/mkshort.style index 52ef14f4a..c48ede002 100644 --- a/reference/mkshort.style +++ b/reference/mkshort.style @@ -6,12 +6,12 @@ SHORTLEN 4 # FILE LAYOUT DEFINITIIONS: # FIELD_ENCLOSER DOUBLEQUOTE -FIELD_DELIMITER COMMASPACE +FIELD_DELIMITER COMMA RECORD_DELIMITER NEWLINE BADCHARS COMMA # # INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE: # -IFIELD LAT_DECIMAL, "", "%8.5f" -IFIELD LON_DECIMAL, "", "%8.5f" +IFIELD LAT_DECIMAL, "", "%.5f" +IFIELD LON_DECIMAL, "", "%.5f" IFIELD SHORTNAME, "", "%s" diff --git a/reference/mkshort4.csv b/reference/mkshort4.csv index 831e6b686..205db9850 100644 --- a/reference/mkshort4.csv +++ b/reference/mkshort4.csv @@ -1,150 +1,150 @@ -"0.00000", "0.00000", "wp" -"0.00000", "0.00000", "wp.1" -"0.00000", "0.00000", "wp.2" -"0.00000", "0.00000", "wp.3" -"0.00000", "0.00000", "wp.4" -"0.00000", "0.00000", "wp.5" -"0.00000", "0.00000", "wp.6" -"0.00000", "0.00000", "wp.7" -"0.00000", "0.00000", "wp.8" -"0.00000", "0.00000", "wp.9" -"0.00000", "0.00000", "w.10" -"0.00000", "0.00000", "w.11" -"0.00000", "0.00000", "w.12" -"0.00000", "0.00000", "w.13" -"0.00000", "0.00000", "w.14" -"0.00000", "0.00000", "w.15" -"0.00000", "0.00000", "w.16" -"0.00000", "0.00000", "w.17" -"0.00000", "0.00000", "w.18" -"0.00000", "0.00000", "w.19" -"0.00000", "0.00000", "w.20" -"0.00000", "0.00000", "w.21" -"0.00000", "0.00000", "w.22" -"0.00000", "0.00000", "w.23" -"0.00000", "0.00000", "w.24" -"0.00000", "0.00000", "w.25" -"0.00000", "0.00000", "w.26" -"0.00000", "0.00000", "w.27" -"0.00000", "0.00000", "w.28" -"0.00000", "0.00000", "w.29" -"0.00000", "0.00000", "w.30" -"0.00000", "0.00000", "w.31" -"0.00000", "0.00000", "w.32" -"0.00000", "0.00000", "w.33" -"0.00000", "0.00000", "w.34" -"0.00000", "0.00000", "w.35" -"0.00000", "0.00000", "w.36" -"0.00000", "0.00000", "w.37" -"0.00000", "0.00000", "w.38" -"0.00000", "0.00000", "w.39" -"0.00000", "0.00000", "w.40" -"0.00000", "0.00000", "w.41" -"0.00000", "0.00000", "w.42" -"0.00000", "0.00000", "w.43" -"0.00000", "0.00000", "w.44" -"0.00000", "0.00000", "w.45" -"0.00000", "0.00000", "w.46" -"0.00000", "0.00000", "w.47" -"0.00000", "0.00000", "w.48" -"0.00000", "0.00000", "w.49" -"0.00000", "0.00000", "w.50" -"0.00000", "0.00000", "w.51" -"0.00000", "0.00000", "w.52" -"0.00000", "0.00000", "w.53" -"0.00000", "0.00000", "w.54" -"0.00000", "0.00000", "w.55" -"0.00000", "0.00000", "w.56" -"0.00000", "0.00000", "w.57" -"0.00000", "0.00000", "w.58" -"0.00000", "0.00000", "w.59" -"0.00000", "0.00000", "w.60" -"0.00000", "0.00000", "w.61" -"0.00000", "0.00000", "w.62" -"0.00000", "0.00000", "w.63" -"0.00000", "0.00000", "w.64" -"0.00000", "0.00000", "w.65" -"0.00000", "0.00000", "w.66" -"0.00000", "0.00000", "w.67" -"0.00000", "0.00000", "w.68" -"0.00000", "0.00000", "w.69" -"0.00000", "0.00000", "w.70" -"0.00000", "0.00000", "w.71" -"0.00000", "0.00000", "w.72" -"0.00000", "0.00000", "w.73" -"0.00000", "0.00000", "w.74" -"0.00000", "0.00000", "w.75" -"0.00000", "0.00000", "w.76" -"0.00000", "0.00000", "w.77" -"0.00000", "0.00000", "w.78" -"0.00000", "0.00000", "w.79" -"0.00000", "0.00000", "w.80" -"0.00000", "0.00000", "w.81" -"0.00000", "0.00000", "w.82" -"0.00000", "0.00000", "w.83" -"0.00000", "0.00000", "w.84" -"0.00000", "0.00000", "w.85" -"0.00000", "0.00000", "w.86" -"0.00000", "0.00000", "w.87" -"0.00000", "0.00000", "w.88" -"0.00000", "0.00000", "w.89" -"0.00000", "0.00000", "w.90" -"0.00000", "0.00000", "w.91" -"0.00000", "0.00000", "w.92" -"0.00000", "0.00000", "w.93" -"0.00000", "0.00000", "w.94" -"0.00000", "0.00000", "w.95" -"0.00000", "0.00000", "w.96" -"0.00000", "0.00000", "w.97" -"0.00000", "0.00000", "w.98" -"0.00000", "0.00000", "w.99" -"0.00000", "0.00000", ".100" -"0.00000", "0.00000", ".101" -"0.00000", "0.00000", ".102" -"0.00000", "0.00000", ".103" -"0.00000", "0.00000", ".104" -"0.00000", "0.00000", ".105" -"0.00000", "0.00000", ".106" -"0.00000", "0.00000", ".107" -"0.00000", "0.00000", ".108" -"0.00000", "0.00000", ".109" -"0.00000", "0.00000", ".110" -"0.00000", "0.00000", ".111" -"0.00000", "0.00000", ".112" -"0.00000", "0.00000", ".113" -"0.00000", "0.00000", ".114" -"0.00000", "0.00000", ".115" -"0.00000", "0.00000", ".116" -"0.00000", "0.00000", ".117" -"0.00000", "0.00000", ".118" -"0.00000", "0.00000", ".119" -"0.00000", "0.00000", ".120" -"0.00000", "0.00000", ".121" -"0.00000", "0.00000", ".122" -"0.00000", "0.00000", ".123" -"0.00000", "0.00000", ".124" -"0.00000", "0.00000", ".125" -"0.00000", "0.00000", ".126" -"0.00000", "0.00000", ".127" -"0.00000", "0.00000", ".128" -"0.00000", "0.00000", ".129" -"0.00000", "0.00000", ".130" -"0.00000", "0.00000", ".131" -"0.00000", "0.00000", ".132" -"0.00000", "0.00000", ".133" -"0.00000", "0.00000", ".134" -"0.00000", "0.00000", ".135" -"0.00000", "0.00000", ".136" -"0.00000", "0.00000", ".137" -"0.00000", "0.00000", ".138" -"0.00000", "0.00000", ".139" -"0.00000", "0.00000", ".140" -"0.00000", "0.00000", ".141" -"0.00000", "0.00000", ".142" -"0.00000", "0.00000", ".143" -"0.00000", "0.00000", ".144" -"0.00000", "0.00000", ".145" -"0.00000", "0.00000", ".146" -"0.00000", "0.00000", ".147" -"0.00000", "0.00000", ".148" -"0.00000", "0.00000", ".149" +"0.00000","0.00000","wp" +"0.00000","0.00000","wp.1" +"0.00000","0.00000","wp.2" +"0.00000","0.00000","wp.3" +"0.00000","0.00000","wp.4" +"0.00000","0.00000","wp.5" +"0.00000","0.00000","wp.6" +"0.00000","0.00000","wp.7" +"0.00000","0.00000","wp.8" +"0.00000","0.00000","wp.9" +"0.00000","0.00000","w.10" +"0.00000","0.00000","w.11" +"0.00000","0.00000","w.12" +"0.00000","0.00000","w.13" +"0.00000","0.00000","w.14" +"0.00000","0.00000","w.15" +"0.00000","0.00000","w.16" +"0.00000","0.00000","w.17" +"0.00000","0.00000","w.18" +"0.00000","0.00000","w.19" +"0.00000","0.00000","w.20" +"0.00000","0.00000","w.21" +"0.00000","0.00000","w.22" +"0.00000","0.00000","w.23" +"0.00000","0.00000","w.24" +"0.00000","0.00000","w.25" +"0.00000","0.00000","w.26" +"0.00000","0.00000","w.27" +"0.00000","0.00000","w.28" +"0.00000","0.00000","w.29" +"0.00000","0.00000","w.30" +"0.00000","0.00000","w.31" +"0.00000","0.00000","w.32" +"0.00000","0.00000","w.33" +"0.00000","0.00000","w.34" +"0.00000","0.00000","w.35" +"0.00000","0.00000","w.36" +"0.00000","0.00000","w.37" +"0.00000","0.00000","w.38" +"0.00000","0.00000","w.39" +"0.00000","0.00000","w.40" +"0.00000","0.00000","w.41" +"0.00000","0.00000","w.42" +"0.00000","0.00000","w.43" +"0.00000","0.00000","w.44" +"0.00000","0.00000","w.45" +"0.00000","0.00000","w.46" +"0.00000","0.00000","w.47" +"0.00000","0.00000","w.48" +"0.00000","0.00000","w.49" +"0.00000","0.00000","w.50" +"0.00000","0.00000","w.51" +"0.00000","0.00000","w.52" +"0.00000","0.00000","w.53" +"0.00000","0.00000","w.54" +"0.00000","0.00000","w.55" +"0.00000","0.00000","w.56" +"0.00000","0.00000","w.57" +"0.00000","0.00000","w.58" +"0.00000","0.00000","w.59" +"0.00000","0.00000","w.60" +"0.00000","0.00000","w.61" +"0.00000","0.00000","w.62" +"0.00000","0.00000","w.63" +"0.00000","0.00000","w.64" +"0.00000","0.00000","w.65" +"0.00000","0.00000","w.66" +"0.00000","0.00000","w.67" +"0.00000","0.00000","w.68" +"0.00000","0.00000","w.69" +"0.00000","0.00000","w.70" +"0.00000","0.00000","w.71" +"0.00000","0.00000","w.72" +"0.00000","0.00000","w.73" +"0.00000","0.00000","w.74" +"0.00000","0.00000","w.75" +"0.00000","0.00000","w.76" +"0.00000","0.00000","w.77" +"0.00000","0.00000","w.78" +"0.00000","0.00000","w.79" +"0.00000","0.00000","w.80" +"0.00000","0.00000","w.81" +"0.00000","0.00000","w.82" +"0.00000","0.00000","w.83" +"0.00000","0.00000","w.84" +"0.00000","0.00000","w.85" +"0.00000","0.00000","w.86" +"0.00000","0.00000","w.87" +"0.00000","0.00000","w.88" +"0.00000","0.00000","w.89" +"0.00000","0.00000","w.90" +"0.00000","0.00000","w.91" +"0.00000","0.00000","w.92" +"0.00000","0.00000","w.93" +"0.00000","0.00000","w.94" +"0.00000","0.00000","w.95" +"0.00000","0.00000","w.96" +"0.00000","0.00000","w.97" +"0.00000","0.00000","w.98" +"0.00000","0.00000","w.99" +"0.00000","0.00000",".100" +"0.00000","0.00000",".101" +"0.00000","0.00000",".102" +"0.00000","0.00000",".103" +"0.00000","0.00000",".104" +"0.00000","0.00000",".105" +"0.00000","0.00000",".106" +"0.00000","0.00000",".107" +"0.00000","0.00000",".108" +"0.00000","0.00000",".109" +"0.00000","0.00000",".110" +"0.00000","0.00000",".111" +"0.00000","0.00000",".112" +"0.00000","0.00000",".113" +"0.00000","0.00000",".114" +"0.00000","0.00000",".115" +"0.00000","0.00000",".116" +"0.00000","0.00000",".117" +"0.00000","0.00000",".118" +"0.00000","0.00000",".119" +"0.00000","0.00000",".120" +"0.00000","0.00000",".121" +"0.00000","0.00000",".122" +"0.00000","0.00000",".123" +"0.00000","0.00000",".124" +"0.00000","0.00000",".125" +"0.00000","0.00000",".126" +"0.00000","0.00000",".127" +"0.00000","0.00000",".128" +"0.00000","0.00000",".129" +"0.00000","0.00000",".130" +"0.00000","0.00000",".131" +"0.00000","0.00000",".132" +"0.00000","0.00000",".133" +"0.00000","0.00000",".134" +"0.00000","0.00000",".135" +"0.00000","0.00000",".136" +"0.00000","0.00000",".137" +"0.00000","0.00000",".138" +"0.00000","0.00000",".139" +"0.00000","0.00000",".140" +"0.00000","0.00000",".141" +"0.00000","0.00000",".142" +"0.00000","0.00000",".143" +"0.00000","0.00000",".144" +"0.00000","0.00000",".145" +"0.00000","0.00000",".146" +"0.00000","0.00000",".147" +"0.00000","0.00000",".148" +"0.00000","0.00000",".149" diff --git a/reference/mkshort4.log b/reference/mkshort4.log new file mode 100644 index 000000000..8937cc8ea --- /dev/null +++ b/reference/mkshort4.log @@ -0,0 +1,18 @@ +"0.00000","0.00000","a e" +"0.00000","0.00000","abc0123" +"0.00000","0.00000","ab0123" +"0.00000","0.00000","a0123" +"0.00000","0.00000","0123" +"0.00000","0.00000","123" +"0.00000","0.00000","23" +"0.00000","0.00000","3" +"0.00000","0.00000","xxaeiouzz" +"0.00000","0.00000","xxaeiozz" +"0.00000","0.00000","xxaeizz" +"0.00000","0.00000","xxaezz" +"0.00000","0.00000","xxazz" +"0.00000","0.00000","xxzz" +"0.00000","0.00000","abcd" +"0.00000","0.00000","abc" +"0.00000","0.00000","ab" +"0.00000","0.00000","abcd 1" diff --git a/reference/mkshort5.csv b/reference/mkshort5.csv index e87dca0c1..66d071a2b 100644 --- a/reference/mkshort5.csv +++ b/reference/mkshort5.csv @@ -1,150 +1,150 @@ -"0.00000", "0.00000", "wp" -"0.00000", "0.00000", "wp.1" -"0.00000", "0.00000", "wp.2" -"0.00000", "0.00000", "wp.3" -"0.00000", "0.00000", "wp.4" -"0.00000", "0.00000", "wp.5" -"0.00000", "0.00000", "wp.6" -"0.00000", "0.00000", "wp.7" -"0.00000", "0.00000", "wp.8" -"0.00000", "0.00000", "wp.9" -"0.00000", "0.00000", "wp.10" -"0.00000", "0.00000", "wp.11" -"0.00000", "0.00000", "wp.12" -"0.00000", "0.00000", "wp.13" -"0.00000", "0.00000", "wp.14" -"0.00000", "0.00000", "wp.15" -"0.00000", "0.00000", "wp.16" -"0.00000", "0.00000", "wp.17" -"0.00000", "0.00000", "wp.18" -"0.00000", "0.00000", "wp.19" -"0.00000", "0.00000", "wp.20" -"0.00000", "0.00000", "wp.21" -"0.00000", "0.00000", "wp.22" -"0.00000", "0.00000", "wp.23" -"0.00000", "0.00000", "wp.24" -"0.00000", "0.00000", "wp.25" -"0.00000", "0.00000", "wp.26" -"0.00000", "0.00000", "wp.27" -"0.00000", "0.00000", "wp.28" -"0.00000", "0.00000", "wp.29" -"0.00000", "0.00000", "wp.30" -"0.00000", "0.00000", "wp.31" -"0.00000", "0.00000", "wp.32" -"0.00000", "0.00000", "wp.33" -"0.00000", "0.00000", "wp.34" -"0.00000", "0.00000", "wp.35" -"0.00000", "0.00000", "wp.36" -"0.00000", "0.00000", "wp.37" -"0.00000", "0.00000", "wp.38" -"0.00000", "0.00000", "wp.39" -"0.00000", "0.00000", "wp.40" -"0.00000", "0.00000", "wp.41" -"0.00000", "0.00000", "wp.42" -"0.00000", "0.00000", "wp.43" -"0.00000", "0.00000", "wp.44" -"0.00000", "0.00000", "wp.45" -"0.00000", "0.00000", "wp.46" -"0.00000", "0.00000", "wp.47" -"0.00000", "0.00000", "wp.48" -"0.00000", "0.00000", "wp.49" -"0.00000", "0.00000", "wp.50" -"0.00000", "0.00000", "wp.51" -"0.00000", "0.00000", "wp.52" -"0.00000", "0.00000", "wp.53" -"0.00000", "0.00000", "wp.54" -"0.00000", "0.00000", "wp.55" -"0.00000", "0.00000", "wp.56" -"0.00000", "0.00000", "wp.57" -"0.00000", "0.00000", "wp.58" -"0.00000", "0.00000", "wp.59" -"0.00000", "0.00000", "wp.60" -"0.00000", "0.00000", "wp.61" -"0.00000", "0.00000", "wp.62" -"0.00000", "0.00000", "wp.63" -"0.00000", "0.00000", "wp.64" -"0.00000", "0.00000", "wp.65" -"0.00000", "0.00000", "wp.66" -"0.00000", "0.00000", "wp.67" -"0.00000", "0.00000", "wp.68" -"0.00000", "0.00000", "wp.69" -"0.00000", "0.00000", "wp.70" -"0.00000", "0.00000", "wp.71" -"0.00000", "0.00000", "wp.72" -"0.00000", "0.00000", "wp.73" -"0.00000", "0.00000", "wp.74" -"0.00000", "0.00000", "wp.75" -"0.00000", "0.00000", "wp.76" -"0.00000", "0.00000", "wp.77" -"0.00000", "0.00000", "wp.78" -"0.00000", "0.00000", "wp.79" -"0.00000", "0.00000", "wp.80" -"0.00000", "0.00000", "wp.81" -"0.00000", "0.00000", "wp.82" -"0.00000", "0.00000", "wp.83" -"0.00000", "0.00000", "wp.84" -"0.00000", "0.00000", "wp.85" -"0.00000", "0.00000", "wp.86" -"0.00000", "0.00000", "wp.87" -"0.00000", "0.00000", "wp.88" -"0.00000", "0.00000", "wp.89" -"0.00000", "0.00000", "wp.90" -"0.00000", "0.00000", "wp.91" -"0.00000", "0.00000", "wp.92" -"0.00000", "0.00000", "wp.93" -"0.00000", "0.00000", "wp.94" -"0.00000", "0.00000", "wp.95" -"0.00000", "0.00000", "wp.96" -"0.00000", "0.00000", "wp.97" -"0.00000", "0.00000", "wp.98" -"0.00000", "0.00000", "wp.99" -"0.00000", "0.00000", "w.100" -"0.00000", "0.00000", "w.101" -"0.00000", "0.00000", "w.102" -"0.00000", "0.00000", "w.103" -"0.00000", "0.00000", "w.104" -"0.00000", "0.00000", "w.105" -"0.00000", "0.00000", "w.106" -"0.00000", "0.00000", "w.107" -"0.00000", "0.00000", "w.108" -"0.00000", "0.00000", "w.109" -"0.00000", "0.00000", "w.110" -"0.00000", "0.00000", "w.111" -"0.00000", "0.00000", "w.112" -"0.00000", "0.00000", "w.113" -"0.00000", "0.00000", "w.114" -"0.00000", "0.00000", "w.115" -"0.00000", "0.00000", "w.116" -"0.00000", "0.00000", "w.117" -"0.00000", "0.00000", "w.118" -"0.00000", "0.00000", "w.119" -"0.00000", "0.00000", "w.120" -"0.00000", "0.00000", "w.121" -"0.00000", "0.00000", "w.122" -"0.00000", "0.00000", "w.123" -"0.00000", "0.00000", "w.124" -"0.00000", "0.00000", "w.125" -"0.00000", "0.00000", "w.126" -"0.00000", "0.00000", "w.127" -"0.00000", "0.00000", "w.128" -"0.00000", "0.00000", "w.129" -"0.00000", "0.00000", "w.130" -"0.00000", "0.00000", "w.131" -"0.00000", "0.00000", "w.132" -"0.00000", "0.00000", "w.133" -"0.00000", "0.00000", "w.134" -"0.00000", "0.00000", "w.135" -"0.00000", "0.00000", "w.136" -"0.00000", "0.00000", "w.137" -"0.00000", "0.00000", "w.138" -"0.00000", "0.00000", "w.139" -"0.00000", "0.00000", "w.140" -"0.00000", "0.00000", "w.141" -"0.00000", "0.00000", "w.142" -"0.00000", "0.00000", "w.143" -"0.00000", "0.00000", "w.144" -"0.00000", "0.00000", "w.145" -"0.00000", "0.00000", "w.146" -"0.00000", "0.00000", "w.147" -"0.00000", "0.00000", "w.148" -"0.00000", "0.00000", "w.149" +"0.00000","0.00000","wp" +"0.00000","0.00000","wp.1" +"0.00000","0.00000","wp.2" +"0.00000","0.00000","wp.3" +"0.00000","0.00000","wp.4" +"0.00000","0.00000","wp.5" +"0.00000","0.00000","wp.6" +"0.00000","0.00000","wp.7" +"0.00000","0.00000","wp.8" +"0.00000","0.00000","wp.9" +"0.00000","0.00000","wp.10" +"0.00000","0.00000","wp.11" +"0.00000","0.00000","wp.12" +"0.00000","0.00000","wp.13" +"0.00000","0.00000","wp.14" +"0.00000","0.00000","wp.15" +"0.00000","0.00000","wp.16" +"0.00000","0.00000","wp.17" +"0.00000","0.00000","wp.18" +"0.00000","0.00000","wp.19" +"0.00000","0.00000","wp.20" +"0.00000","0.00000","wp.21" +"0.00000","0.00000","wp.22" +"0.00000","0.00000","wp.23" +"0.00000","0.00000","wp.24" +"0.00000","0.00000","wp.25" +"0.00000","0.00000","wp.26" +"0.00000","0.00000","wp.27" +"0.00000","0.00000","wp.28" +"0.00000","0.00000","wp.29" +"0.00000","0.00000","wp.30" +"0.00000","0.00000","wp.31" +"0.00000","0.00000","wp.32" +"0.00000","0.00000","wp.33" +"0.00000","0.00000","wp.34" +"0.00000","0.00000","wp.35" +"0.00000","0.00000","wp.36" +"0.00000","0.00000","wp.37" +"0.00000","0.00000","wp.38" +"0.00000","0.00000","wp.39" +"0.00000","0.00000","wp.40" +"0.00000","0.00000","wp.41" +"0.00000","0.00000","wp.42" +"0.00000","0.00000","wp.43" +"0.00000","0.00000","wp.44" +"0.00000","0.00000","wp.45" +"0.00000","0.00000","wp.46" +"0.00000","0.00000","wp.47" +"0.00000","0.00000","wp.48" +"0.00000","0.00000","wp.49" +"0.00000","0.00000","wp.50" +"0.00000","0.00000","wp.51" +"0.00000","0.00000","wp.52" +"0.00000","0.00000","wp.53" +"0.00000","0.00000","wp.54" +"0.00000","0.00000","wp.55" +"0.00000","0.00000","wp.56" +"0.00000","0.00000","wp.57" +"0.00000","0.00000","wp.58" +"0.00000","0.00000","wp.59" +"0.00000","0.00000","wp.60" +"0.00000","0.00000","wp.61" +"0.00000","0.00000","wp.62" +"0.00000","0.00000","wp.63" +"0.00000","0.00000","wp.64" +"0.00000","0.00000","wp.65" +"0.00000","0.00000","wp.66" +"0.00000","0.00000","wp.67" +"0.00000","0.00000","wp.68" +"0.00000","0.00000","wp.69" +"0.00000","0.00000","wp.70" +"0.00000","0.00000","wp.71" +"0.00000","0.00000","wp.72" +"0.00000","0.00000","wp.73" +"0.00000","0.00000","wp.74" +"0.00000","0.00000","wp.75" +"0.00000","0.00000","wp.76" +"0.00000","0.00000","wp.77" +"0.00000","0.00000","wp.78" +"0.00000","0.00000","wp.79" +"0.00000","0.00000","wp.80" +"0.00000","0.00000","wp.81" +"0.00000","0.00000","wp.82" +"0.00000","0.00000","wp.83" +"0.00000","0.00000","wp.84" +"0.00000","0.00000","wp.85" +"0.00000","0.00000","wp.86" +"0.00000","0.00000","wp.87" +"0.00000","0.00000","wp.88" +"0.00000","0.00000","wp.89" +"0.00000","0.00000","wp.90" +"0.00000","0.00000","wp.91" +"0.00000","0.00000","wp.92" +"0.00000","0.00000","wp.93" +"0.00000","0.00000","wp.94" +"0.00000","0.00000","wp.95" +"0.00000","0.00000","wp.96" +"0.00000","0.00000","wp.97" +"0.00000","0.00000","wp.98" +"0.00000","0.00000","wp.99" +"0.00000","0.00000","w.100" +"0.00000","0.00000","w.101" +"0.00000","0.00000","w.102" +"0.00000","0.00000","w.103" +"0.00000","0.00000","w.104" +"0.00000","0.00000","w.105" +"0.00000","0.00000","w.106" +"0.00000","0.00000","w.107" +"0.00000","0.00000","w.108" +"0.00000","0.00000","w.109" +"0.00000","0.00000","w.110" +"0.00000","0.00000","w.111" +"0.00000","0.00000","w.112" +"0.00000","0.00000","w.113" +"0.00000","0.00000","w.114" +"0.00000","0.00000","w.115" +"0.00000","0.00000","w.116" +"0.00000","0.00000","w.117" +"0.00000","0.00000","w.118" +"0.00000","0.00000","w.119" +"0.00000","0.00000","w.120" +"0.00000","0.00000","w.121" +"0.00000","0.00000","w.122" +"0.00000","0.00000","w.123" +"0.00000","0.00000","w.124" +"0.00000","0.00000","w.125" +"0.00000","0.00000","w.126" +"0.00000","0.00000","w.127" +"0.00000","0.00000","w.128" +"0.00000","0.00000","w.129" +"0.00000","0.00000","w.130" +"0.00000","0.00000","w.131" +"0.00000","0.00000","w.132" +"0.00000","0.00000","w.133" +"0.00000","0.00000","w.134" +"0.00000","0.00000","w.135" +"0.00000","0.00000","w.136" +"0.00000","0.00000","w.137" +"0.00000","0.00000","w.138" +"0.00000","0.00000","w.139" +"0.00000","0.00000","w.140" +"0.00000","0.00000","w.141" +"0.00000","0.00000","w.142" +"0.00000","0.00000","w.143" +"0.00000","0.00000","w.144" +"0.00000","0.00000","w.145" +"0.00000","0.00000","w.146" +"0.00000","0.00000","w.147" +"0.00000","0.00000","w.148" +"0.00000","0.00000","w.149" diff --git a/reference/mkshort6.csv b/reference/mkshort6.csv index 230f75523..ceecf9ba0 100644 --- a/reference/mkshort6.csv +++ b/reference/mkshort6.csv @@ -1,150 +1,150 @@ -"0.00000", "0.00000", "wp" -"0.00000", "0.00000", "wp.1" -"0.00000", "0.00000", "wp.2" -"0.00000", "0.00000", "wp.3" -"0.00000", "0.00000", "wp.4" -"0.00000", "0.00000", "wp.5" -"0.00000", "0.00000", "wp.6" -"0.00000", "0.00000", "wp.7" -"0.00000", "0.00000", "wp.8" -"0.00000", "0.00000", "wp.9" -"0.00000", "0.00000", "wp.10" -"0.00000", "0.00000", "wp.11" -"0.00000", "0.00000", "wp.12" -"0.00000", "0.00000", "wp.13" -"0.00000", "0.00000", "wp.14" -"0.00000", "0.00000", "wp.15" -"0.00000", "0.00000", "wp.16" -"0.00000", "0.00000", "wp.17" -"0.00000", "0.00000", "wp.18" -"0.00000", "0.00000", "wp.19" -"0.00000", "0.00000", "wp.20" -"0.00000", "0.00000", "wp.21" -"0.00000", "0.00000", "wp.22" -"0.00000", "0.00000", "wp.23" -"0.00000", "0.00000", "wp.24" -"0.00000", "0.00000", "wp.25" -"0.00000", "0.00000", "wp.26" -"0.00000", "0.00000", "wp.27" -"0.00000", "0.00000", "wp.28" -"0.00000", "0.00000", "wp.29" -"0.00000", "0.00000", "wp.30" -"0.00000", "0.00000", "wp.31" -"0.00000", "0.00000", "wp.32" -"0.00000", "0.00000", "wp.33" -"0.00000", "0.00000", "wp.34" -"0.00000", "0.00000", "wp.35" -"0.00000", "0.00000", "wp.36" -"0.00000", "0.00000", "wp.37" -"0.00000", "0.00000", "wp.38" -"0.00000", "0.00000", "wp.39" -"0.00000", "0.00000", "wp.40" -"0.00000", "0.00000", "wp.41" -"0.00000", "0.00000", "wp.42" -"0.00000", "0.00000", "wp.43" -"0.00000", "0.00000", "wp.44" -"0.00000", "0.00000", "wp.45" -"0.00000", "0.00000", "wp.46" -"0.00000", "0.00000", "wp.47" -"0.00000", "0.00000", "wp.48" -"0.00000", "0.00000", "wp.49" -"0.00000", "0.00000", "wp.50" -"0.00000", "0.00000", "wp.51" -"0.00000", "0.00000", "wp.52" -"0.00000", "0.00000", "wp.53" -"0.00000", "0.00000", "wp.54" -"0.00000", "0.00000", "wp.55" -"0.00000", "0.00000", "wp.56" -"0.00000", "0.00000", "wp.57" -"0.00000", "0.00000", "wp.58" -"0.00000", "0.00000", "wp.59" -"0.00000", "0.00000", "wp.60" -"0.00000", "0.00000", "wp.61" -"0.00000", "0.00000", "wp.62" -"0.00000", "0.00000", "wp.63" -"0.00000", "0.00000", "wp.64" -"0.00000", "0.00000", "wp.65" -"0.00000", "0.00000", "wp.66" -"0.00000", "0.00000", "wp.67" -"0.00000", "0.00000", "wp.68" -"0.00000", "0.00000", "wp.69" -"0.00000", "0.00000", "wp.70" -"0.00000", "0.00000", "wp.71" -"0.00000", "0.00000", "wp.72" -"0.00000", "0.00000", "wp.73" -"0.00000", "0.00000", "wp.74" -"0.00000", "0.00000", "wp.75" -"0.00000", "0.00000", "wp.76" -"0.00000", "0.00000", "wp.77" -"0.00000", "0.00000", "wp.78" -"0.00000", "0.00000", "wp.79" -"0.00000", "0.00000", "wp.80" -"0.00000", "0.00000", "wp.81" -"0.00000", "0.00000", "wp.82" -"0.00000", "0.00000", "wp.83" -"0.00000", "0.00000", "wp.84" -"0.00000", "0.00000", "wp.85" -"0.00000", "0.00000", "wp.86" -"0.00000", "0.00000", "wp.87" -"0.00000", "0.00000", "wp.88" -"0.00000", "0.00000", "wp.89" -"0.00000", "0.00000", "wp.90" -"0.00000", "0.00000", "wp.91" -"0.00000", "0.00000", "wp.92" -"0.00000", "0.00000", "wp.93" -"0.00000", "0.00000", "wp.94" -"0.00000", "0.00000", "wp.95" -"0.00000", "0.00000", "wp.96" -"0.00000", "0.00000", "wp.97" -"0.00000", "0.00000", "wp.98" -"0.00000", "0.00000", "wp.99" -"0.00000", "0.00000", "wp.100" -"0.00000", "0.00000", "wp.101" -"0.00000", "0.00000", "wp.102" -"0.00000", "0.00000", "wp.103" -"0.00000", "0.00000", "wp.104" -"0.00000", "0.00000", "wp.105" -"0.00000", "0.00000", "wp.106" -"0.00000", "0.00000", "wp.107" -"0.00000", "0.00000", "wp.108" -"0.00000", "0.00000", "wp.109" -"0.00000", "0.00000", "wp.110" -"0.00000", "0.00000", "wp.111" -"0.00000", "0.00000", "wp.112" -"0.00000", "0.00000", "wp.113" -"0.00000", "0.00000", "wp.114" -"0.00000", "0.00000", "wp.115" -"0.00000", "0.00000", "wp.116" -"0.00000", "0.00000", "wp.117" -"0.00000", "0.00000", "wp.118" -"0.00000", "0.00000", "wp.119" -"0.00000", "0.00000", "wp.120" -"0.00000", "0.00000", "wp.121" -"0.00000", "0.00000", "wp.122" -"0.00000", "0.00000", "wp.123" -"0.00000", "0.00000", "wp.124" -"0.00000", "0.00000", "wp.125" -"0.00000", "0.00000", "wp.126" -"0.00000", "0.00000", "wp.127" -"0.00000", "0.00000", "wp.128" -"0.00000", "0.00000", "wp.129" -"0.00000", "0.00000", "wp.130" -"0.00000", "0.00000", "wp.131" -"0.00000", "0.00000", "wp.132" -"0.00000", "0.00000", "wp.133" -"0.00000", "0.00000", "wp.134" -"0.00000", "0.00000", "wp.135" -"0.00000", "0.00000", "wp.136" -"0.00000", "0.00000", "wp.137" -"0.00000", "0.00000", "wp.138" -"0.00000", "0.00000", "wp.139" -"0.00000", "0.00000", "wp.140" -"0.00000", "0.00000", "wp.141" -"0.00000", "0.00000", "wp.142" -"0.00000", "0.00000", "wp.143" -"0.00000", "0.00000", "wp.144" -"0.00000", "0.00000", "wp.145" -"0.00000", "0.00000", "wp.146" -"0.00000", "0.00000", "wp.147" -"0.00000", "0.00000", "wp.148" -"0.00000", "0.00000", "wp.149" +"0.00000","0.00000","wp" +"0.00000","0.00000","wp.1" +"0.00000","0.00000","wp.2" +"0.00000","0.00000","wp.3" +"0.00000","0.00000","wp.4" +"0.00000","0.00000","wp.5" +"0.00000","0.00000","wp.6" +"0.00000","0.00000","wp.7" +"0.00000","0.00000","wp.8" +"0.00000","0.00000","wp.9" +"0.00000","0.00000","wp.10" +"0.00000","0.00000","wp.11" +"0.00000","0.00000","wp.12" +"0.00000","0.00000","wp.13" +"0.00000","0.00000","wp.14" +"0.00000","0.00000","wp.15" +"0.00000","0.00000","wp.16" +"0.00000","0.00000","wp.17" +"0.00000","0.00000","wp.18" +"0.00000","0.00000","wp.19" +"0.00000","0.00000","wp.20" +"0.00000","0.00000","wp.21" +"0.00000","0.00000","wp.22" +"0.00000","0.00000","wp.23" +"0.00000","0.00000","wp.24" +"0.00000","0.00000","wp.25" +"0.00000","0.00000","wp.26" +"0.00000","0.00000","wp.27" +"0.00000","0.00000","wp.28" +"0.00000","0.00000","wp.29" +"0.00000","0.00000","wp.30" +"0.00000","0.00000","wp.31" +"0.00000","0.00000","wp.32" +"0.00000","0.00000","wp.33" +"0.00000","0.00000","wp.34" +"0.00000","0.00000","wp.35" +"0.00000","0.00000","wp.36" +"0.00000","0.00000","wp.37" +"0.00000","0.00000","wp.38" +"0.00000","0.00000","wp.39" +"0.00000","0.00000","wp.40" +"0.00000","0.00000","wp.41" +"0.00000","0.00000","wp.42" +"0.00000","0.00000","wp.43" +"0.00000","0.00000","wp.44" +"0.00000","0.00000","wp.45" +"0.00000","0.00000","wp.46" +"0.00000","0.00000","wp.47" +"0.00000","0.00000","wp.48" +"0.00000","0.00000","wp.49" +"0.00000","0.00000","wp.50" +"0.00000","0.00000","wp.51" +"0.00000","0.00000","wp.52" +"0.00000","0.00000","wp.53" +"0.00000","0.00000","wp.54" +"0.00000","0.00000","wp.55" +"0.00000","0.00000","wp.56" +"0.00000","0.00000","wp.57" +"0.00000","0.00000","wp.58" +"0.00000","0.00000","wp.59" +"0.00000","0.00000","wp.60" +"0.00000","0.00000","wp.61" +"0.00000","0.00000","wp.62" +"0.00000","0.00000","wp.63" +"0.00000","0.00000","wp.64" +"0.00000","0.00000","wp.65" +"0.00000","0.00000","wp.66" +"0.00000","0.00000","wp.67" +"0.00000","0.00000","wp.68" +"0.00000","0.00000","wp.69" +"0.00000","0.00000","wp.70" +"0.00000","0.00000","wp.71" +"0.00000","0.00000","wp.72" +"0.00000","0.00000","wp.73" +"0.00000","0.00000","wp.74" +"0.00000","0.00000","wp.75" +"0.00000","0.00000","wp.76" +"0.00000","0.00000","wp.77" +"0.00000","0.00000","wp.78" +"0.00000","0.00000","wp.79" +"0.00000","0.00000","wp.80" +"0.00000","0.00000","wp.81" +"0.00000","0.00000","wp.82" +"0.00000","0.00000","wp.83" +"0.00000","0.00000","wp.84" +"0.00000","0.00000","wp.85" +"0.00000","0.00000","wp.86" +"0.00000","0.00000","wp.87" +"0.00000","0.00000","wp.88" +"0.00000","0.00000","wp.89" +"0.00000","0.00000","wp.90" +"0.00000","0.00000","wp.91" +"0.00000","0.00000","wp.92" +"0.00000","0.00000","wp.93" +"0.00000","0.00000","wp.94" +"0.00000","0.00000","wp.95" +"0.00000","0.00000","wp.96" +"0.00000","0.00000","wp.97" +"0.00000","0.00000","wp.98" +"0.00000","0.00000","wp.99" +"0.00000","0.00000","wp.100" +"0.00000","0.00000","wp.101" +"0.00000","0.00000","wp.102" +"0.00000","0.00000","wp.103" +"0.00000","0.00000","wp.104" +"0.00000","0.00000","wp.105" +"0.00000","0.00000","wp.106" +"0.00000","0.00000","wp.107" +"0.00000","0.00000","wp.108" +"0.00000","0.00000","wp.109" +"0.00000","0.00000","wp.110" +"0.00000","0.00000","wp.111" +"0.00000","0.00000","wp.112" +"0.00000","0.00000","wp.113" +"0.00000","0.00000","wp.114" +"0.00000","0.00000","wp.115" +"0.00000","0.00000","wp.116" +"0.00000","0.00000","wp.117" +"0.00000","0.00000","wp.118" +"0.00000","0.00000","wp.119" +"0.00000","0.00000","wp.120" +"0.00000","0.00000","wp.121" +"0.00000","0.00000","wp.122" +"0.00000","0.00000","wp.123" +"0.00000","0.00000","wp.124" +"0.00000","0.00000","wp.125" +"0.00000","0.00000","wp.126" +"0.00000","0.00000","wp.127" +"0.00000","0.00000","wp.128" +"0.00000","0.00000","wp.129" +"0.00000","0.00000","wp.130" +"0.00000","0.00000","wp.131" +"0.00000","0.00000","wp.132" +"0.00000","0.00000","wp.133" +"0.00000","0.00000","wp.134" +"0.00000","0.00000","wp.135" +"0.00000","0.00000","wp.136" +"0.00000","0.00000","wp.137" +"0.00000","0.00000","wp.138" +"0.00000","0.00000","wp.139" +"0.00000","0.00000","wp.140" +"0.00000","0.00000","wp.141" +"0.00000","0.00000","wp.142" +"0.00000","0.00000","wp.143" +"0.00000","0.00000","wp.144" +"0.00000","0.00000","wp.145" +"0.00000","0.00000","wp.146" +"0.00000","0.00000","wp.147" +"0.00000","0.00000","wp.148" +"0.00000","0.00000","wp.149" diff --git a/testo.d/mkshort.test b/testo.d/mkshort.test index 51007a3ff..b48cd14eb 100644 --- a/testo.d/mkshort.test +++ b/testo.d/mkshort.test @@ -11,3 +11,31 @@ ${VALGRIND} "${PNAME}" -s -i unicsv -f ${REFERENCE}/mkshort.csv -o xcsv,style=${ echo "${PNAME} succeeded! (it shouldn't have with this input...)" } compare ${REFERENCE}/mkshort3.log ${TMPDIR}/mkshort3.log + +rm -f ${TMPDIR}/mkshort4.log +# whitespace +echo '0,0," a e "' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=8,snwhite=1 -F - >> ${TMPDIR}/mkshort4.log +# trailing numbers +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=7 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=6 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=5 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=4 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=3 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=2 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd0123"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=1 -F - >>${TMPDIR}/mkshort4.log +# vowels +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=9 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=8 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=7 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=6 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=5 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"xxaeiouzz"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=4 -F - >>${TMPDIR}/mkshort4.log +#truncation +echo '0,0,"abcd"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=4 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=3 -F - >>${TMPDIR}/mkshort4.log +echo '0,0,"abcd"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=2 -F - >>${TMPDIR}/mkshort4.log +#replacements +echo '0,0,"abcd one"' | gpsbabel -s -i unicsv,fields=lat+long+name -f - -o xcsv,style=reference/mkshort.style,snlen=8 -F - >>${TMPDIR}/mkshort4.log + +compare ${REFERENCE}/mkshort4.log ${TMPDIR}/mkshort4.log + -- 2.30.2